﻿Public Class frmSolicitudPrestamo
    Dim _titulo As String
    Dim _componentesHabilitados As Boolean
    Dim _tipoVentana As String
    Dim _idSolicitud As Long
    Dim _idCliente As String 'Este ID es usado para el Cliente asociado a la Solicitud
    Dim utilidades As New Utilidades
    Dim _sePresionoGuardar As Boolean = False
    Dim _clienteExiste As Boolean = True
    Dim _formPrincipal As frmPrincipal


    Public Sub New(ByVal tipoVentana As Integer, ByRef form As frmPrincipal)
        Me.InitializeComponent()

        If tipoVentana = Constantes.Ventana_Tipo_Apertura_Detalle Then
            _titulo = "Detalle de Solicitud de Préstamo"
            _componentesHabilitados = False
        End If
        If tipoVentana = Constantes.Ventana_Tipo_Apertura_Nuevo Then
            _titulo = "Nueva Solicitud de Préstamo"
            _componentesHabilitados = True
        End If
        If tipoVentana = Constantes.Ventana_Tipo_Apertura_Edicion Then
            _titulo = "Modificar Solicitud de Préstamo"
            _componentesHabilitados = True
        End If

        _tipoVentana = tipoVentana
        _formPrincipal = form

    End Sub

    Private Sub frmSolicitudPrestamo_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        If Not _tipoVentana = Constantes.Ventana_Tipo_Apertura_Detalle Then
            If _sePresionoGuardar = False And _clienteExiste = True Then
                If MessageBox.Show("Si cancela no se guardarán los cambios ¿Está seguro?", "Atención", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) = Windows.Forms.DialogResult.OK Then
                    e.Cancel = False
                Else
                    e.Cancel = True
                End If
            End If
        End If
    End Sub

    Private Sub frmSolicitudPrestamo_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim myAccesoDatos As New AccesoDatos

        'Seteo el Titulo de la Ventana
        Me.Text = _titulo

        'Cargo Combo de Tipo de Documento
        myAccesoDatos.traer_valores_combo(Me.cmbTipoDocumento, Constantes.Tabla_TIPOS_DOCUMENTOS)

        'Cargo Combo de Cuotas
        Me.cargarComboCuotas()


        If _tipoVentana = Constantes.Ventana_Tipo_Apertura_Nuevo Then
            Me.cargarDatosNuevaSolicitud()
        Else
            Me.cargarDatosDeLaSolicitud()
        End If

        'Habilito los componentes segun la Pantalla
        Me.habilitacionComponentes()

        'Determino que botones mostrar por pantalla
        Me.mostrarBotones()
    End Sub

    Public Property idSolicitud()
        Get
            Return _idSolicitud
        End Get
        Set(ByVal value)
            _idSolicitud = value
        End Set
    End Property

    Public Property idCliente()
        Get
            Return _idCliente
        End Get
        Set(ByVal value)
            _idCliente = value
        End Set
    End Property

    Private Sub mostrarBotones()
        Me.cmdAceptar.Visible = (Not _componentesHabilitados)
        Me.cmdGuardar.Visible = _componentesHabilitados
        Me.cmdCancelar.Visible = _componentesHabilitados
    End Sub

    Private Sub habilitacionComponentes()
        lblAsterisco.Enabled = _componentesHabilitados
        lblAsterisco1.Enabled = _componentesHabilitados
        lblAsterisco2.Enabled = _componentesHabilitados
        lblAsterisco3.Enabled = _componentesHabilitados
        lblDatosRequeridos.Enabled = _componentesHabilitados
        txtMonto.Enabled = _componentesHabilitados
        txtFechaPrimerCompromiso.Enabled = _componentesHabilitados
        cmbCantidadCuotas.Enabled = _componentesHabilitados
    End Sub

    Private Sub cmdAceptar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAceptar.Click
        _sePresionoGuardar = False
        Me.Close()
    End Sub

    Private Sub cmdCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCancelar.Click
        _sePresionoGuardar = False
        Me.Close()
    End Sub

    Private Sub cmdGuardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdGuardar.Click
        If Me.txtMonto.Text.Trim() = "" Then
            MsgBox("El Monto es requerido", vbOKOnly + vbCritical, "Atención")
            Me.txtMonto.Focus()
            Exit Sub
        End If
        If Convert.ToInt64(Me.txtMonto.Text.Trim()) < 1000 Or Convert.ToInt64(Me.txtMonto.Text.Trim()) > 30000 Then
            MsgBox("El Monto no puede ser menor a 1000 o mayor a 30000", vbOKOnly + vbCritical, "Atención")
            Me.txtMonto.Focus()
            Exit Sub
        End If
        If Me.cmbCantidadCuotas.SelectedIndex < 1 Then
            MsgBox("La Cantidad de Cuotas es requerida", vbOKOnly + vbCritical, "Atención")
            Me.cmbCantidadCuotas.Focus()
            Exit Sub
        End If
        If Me.txtFechaPrimerCompromiso.Text.Trim = "/  /" Then
            MsgBox("La Fecha del Primer Compromiso es requerida", vbOKOnly + vbCritical, "Atención")
            Me.txtFechaPrimerCompromiso.Focus()
            Exit Sub
        End If
        If txtFechaPrimerCompromiso.Text < CDate(Today) Then
            MsgBox("La Fecha debe ser mayor o igual a la fecha actual", vbOKOnly + vbCritical, "Atención")
            txtFechaPrimerCompromiso.Focus()
            Exit Sub
        End If

        If MessageBox.Show("¿Está seguro que desea guardar los cambios?", "Atención", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) = Windows.Forms.DialogResult.OK Then
            Dim myAccesoDatos As New AccesoDatos

            If _tipoVentana = Constantes.Ventana_Tipo_Apertura_Nuevo Then
                Dim fecha = txtFechaCreacion.Text.Trim
                fecha = utilidades.obtenerFechaFormatoSQLServer2008(fecha)

                Dim myConsulta As String

                myConsulta = _
                    "INSERT INTO SOLICITUDES_PRESTAMOS(ID_CLIENTE, FECHA_SOLICITUD, MONTO, CANTIDAD_CUOTAS, " & _
                        "FECHA_VENC_PRIMER_COMPROMISO,FECHA_ESTADO,ID_EMPLEADO,ID_ESTADO) VALUES( " & _
                        " " & _idCliente & ", '" & fecha & "', " & txtMonto.Text().Trim() & _
                        ", " & Convert.ToString(cmbCantidadCuotas.SelectedValue) & ", " & _
                        " '" & utilidades.obtenerFechaFormatoSQLServer2008(txtFechaPrimerCompromiso.Text.Trim) & _
                        "', '" & fecha & "', " & _formPrincipal.idUsuarioLogueado & ", " & 3 & ") "

                myAccesoDatos.ejecutarConsulta(myConsulta)

            End If

            If _tipoVentana = Constantes.Ventana_Tipo_Apertura_Edicion Then
                Dim fecha = txtFechaPrimerCompromiso.Text.Trim
                fecha = utilidades.obtenerFechaFormatoSQLServer2008(fecha)

                Dim myConsulta As String
                myConsulta = "UPDATE SOLICITUDES_PRESTAMOS SET " & _
                "CANTIDAD_CUOTAS = " & Convert.ToString(cmbCantidadCuotas.SelectedValue) & ", " & _
                "FECHA_VENC_PRIMER_COMPROMISO = '" & fecha & "', " & _
                "MONTO = " & txtMonto.Text().Trim() & " " & _
                "WHERE ID = " & idSolicitud
                myAccesoDatos.ejecutarConsulta(myConsulta)
            End If

            MessageBox.Show("Los datos han sido guardados exitosamente", "Guardar Solicitud de Préstamo", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Try
                _formPrincipal.frmGestionSolicitudPrestamo.buscar(_formPrincipal.frmGestionSolicitudPrestamo.armarWhereConsulta)
            Catch ex As Exception

            End Try
            _sePresionoGuardar = True
            Me.Close()
        End If
    End Sub

    Private Sub cargarDatosDeLaSolicitud()
        Dim myAccesoDatos As New AccesoDatos
        Dim tablaDB As New Data.DataTable
        Dim myConsulta As String
        myConsulta = _
            "SELECT " & _
                "S.ID AS NRO_SOLICITUD,   " & _
                "CONVERT(VARCHAR(10), S.FECHA_SOLICITUD, 103) AS FECHA_SOLICITUD, " & _
                "CONVERT(VARCHAR(10), S.FECHA_ESTADO, 103) AS FECHA_ESTADO, " & _
                "ESP.DESCRIPCION AS ESTADO, (E.APELLIDO + ', ' + E.NOMBRE) AS USUARIO, " & _
                "C.ID_TIPO_DOCUMENTO AS ID_TIPO_DOCUMENTO, TD.DESCRIPCION AS TIPO_DOCUMENTO, " & _
                "C.NRO_DOCUMENTO, C.NOMBRE, C.APELLIDO, " & _
                "CONVERT(int, floor(S.MONTO)) AS MONTO, S.CANTIDAD_CUOTAS,  " & _
                "CONVERT(VARCHAR(10), S.FECHA_VENC_PRIMER_COMPROMISO, 103) AS FECHA_PRIMER_COMPROMISO " & _
            "FROM SOLICITUDES_PRESTAMOS S INNER JOIN CLIENTES C ON (S.ID_CLIENTE = C.ID) " & _
                "INNER JOIN TIPOS_DOCUMENTOS TD ON (C.ID_TIPO_DOCUMENTO = TD.ID) " & _
                "INNER JOIN ESTADOS_SOLICITUDES_PRESTAMOS ESP ON (S.ID_ESTADO = ESP.ID) " & _
                "INNER JOIN EMPLEADO E ON (S.ID_EMPLEADO = E.ID) " & _
            "WHERE S.ID =  " & _idSolicitud

        tablaDB = myAccesoDatos.ejecutarConsulta(myConsulta)

        'Llenamos las Cajas de Texto con los Valores Correspondientes
        Me.txtNumeroSolicitud.Text = Convert.ToString(tablaDB.Rows.Item(0).Item(0))
        Me.txtFechaCreacion.Text = Convert.ToString(tablaDB.Rows.Item(0).Item(1))
        Me.txtFechaEstado.Text = Convert.ToString(tablaDB.Rows.Item(0).Item(2))
        Me.txtEstado.Text = Convert.ToString(tablaDB.Rows.Item(0).Item(3))
        Me.txtUsuario.Text = Convert.ToString(tablaDB.Rows.Item(0).Item(4))
        Me.txtNumeroDocumento.Text = Convert.ToString(tablaDB.Rows.Item(0).Item(7))
        Me.txtNombreCliente.Text = Convert.ToString(tablaDB.Rows.Item(0).Item(8))
        Me.txtApellidoCliente.Text = Convert.ToString(tablaDB.Rows.Item(0).Item(9))
        Me.txtMonto.Text = Convert.ToString(tablaDB.Rows.Item(0).Item(10))
        Me.txtFechaPrimerCompromiso.Text = Convert.ToString(tablaDB.Rows.Item(0).Item(12))

        'Seteamos los combos a su valor seleccionado correspondiente
        Me.cmbTipoDocumento.SelectedValue = Convert.ToString(tablaDB.Rows.Item(0).Item(5))
        Me.cmbCantidadCuotas.SelectedValue = Convert.ToInt32(tablaDB.Rows.Item(0).Item(11))
    End Sub
    Private Sub cargarDatosNuevaSolicitud()
        Dim fecha As String = Format(Today, "dd/MM/yyyy")

        Me.txtFechaCreacion.Text = fecha
        Me.txtFechaEstado.Text = fecha
        Me.txtEstado.Text = "Pendiente de Aprobación"
        Me.txtUsuario.Text = _formPrincipal.nombreUsuarioLogueado

        Dim myAccesoDatos As New AccesoDatos
        Dim tabla As New Data.DataTable
        Dim myConsulta As String

        myConsulta = _
            "SELECT C.ID_TIPO_DOCUMENTO AS ID_TIPO_DOCUMENTO, C.NRO_DOCUMENTO, C.NOMBRE, C.APELLIDO " & _
            "FROM CLIENTES C " & _
            "WHERE C.ID = " & _idCliente

        tabla = myAccesoDatos.ejecutarConsulta(myConsulta)

        If Not (tabla.Rows.Count > 0) Then
            MsgBox("El Cliente no existe en la Aplicación", vbOKOnly + vbCritical, "Atención")
            _clienteExiste = False
            Me.Close()
        Else
            'Llenamos las Cajas de Texto con los Valores Correspondientes
            Me.txtNumeroDocumento.Text = Convert.ToString(tabla.Rows.Item(0).Item(1))
            Me.txtNombreCliente.Text = Convert.ToString(tabla.Rows.Item(0).Item(2))
            Me.txtApellidoCliente.Text = Convert.ToString(tabla.Rows.Item(0).Item(3))

            'Seteamos los combos a su valor seleccionado correspondiente
            Me.cmbTipoDocumento.SelectedValue = Convert.ToString(tabla.Rows.Item(0).Item(0))
        End If
    End Sub
    Public Sub cargarComboCuotas()
        Dim cuotas As New ArrayList
        cuotas.Add(New ValorComboManual(0, ""))
        cuotas.Add(New ValorComboManual(6, "6"))
        cuotas.Add(New ValorComboManual(9, "9"))
        cuotas.Add(New ValorComboManual(12, "12"))
        cuotas.Add(New ValorComboManual(18, "18"))
        cuotas.Add(New ValorComboManual(24, "24"))

        Me.cmbCantidadCuotas.DataSource = cuotas
        Me.cmbCantidadCuotas.ValueMember = "Value"
        Me.cmbCantidadCuotas.DisplayMember = "Display"
    End Sub

    Private Sub txtMonto_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtMonto.KeyPress
        utilidades.validarKeyPressNumerico(e)
    End Sub

    Private Sub txtFechaPrimerCompromiso_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtFechaPrimerCompromiso.KeyPress
        utilidades.validarKeyPressNumerico(e)
    End Sub

End Class